package test_mongo

import (
	"fmt"
	"labix.org/v2/mgo"
	"labix.org/v2/mgo/bson"
)

type User struct {
	Id string `bson:"_id"`
	Name string `bson:"name"`
	Age int `bson:"age"`
}

func Do(){
	// 链接数据库
	session, err := mgo.Dial("localhost")
	if err != nil {
		fmt.Println(err)
		return
	}
	// 释放数据库
	defer session.Close()

	session.SetMode(mgo.Monotonic, true)
	db := session.DB("sjzdb")
	c := db.C("user")
	//err = c.Insert(&User{"88934", "tom", 25}, &User{"3948", "jonh",28})
	c.Insert(&User{"9766", "jz", 35})
	if err != nil {
		fmt.Println("err =", err)
		return
	}
	result := []User{}
	c.Find(nil).All(&result)
	fmt.Println(result)

	result1 := User{}
	c.Find(nil).One(&result1)
	fmt.Println(result1)

	c.Find(bson.M{"name":"jonh"}).One(&result1)
	fmt.Println(result1)

	// $ne !=
	c.Find(bson.M{"name": bson.M{"$ne": "tom"}}).All(&result)
	fmt.Println(result)

	// $gt >  $gte >=
	c.Find(bson.M{"age": bson.M{"$gt": 25}}).All(&result)
	fmt.Println(result)

	// $lt <  $lte <=
	c.Find(bson.M{"age": bson.M{"$lt": 27}}).All(&result)
	fmt.Println(result)

	// in $in
	// and($and)
	// or ($or)

	// 改 $set
	// $push
	// $pull
	c.Update(bson.M{"_id":9766}, bson.M{"$set": bson.M{"age":12}})
	fmt.Println(result)

	c.Remove(bson.M{"name":"jz"})
	c.Find(nil).All(&result)
	fmt.Println(result)
}
